package com.business.dashboard.service;

import com.business.dashboard.entity.User;
import com.business.dashboard.model.UserLoginRequest;
import com.business.dashboard.model.UserRegisterRequest;
import com.business.dashboard.model.UserUpdateRequest;

import java.util.List;

/**
 * 前端用户服务接口
 * 
 * @author Claude
 * @since 2025-07-06
 */
public interface UserService {

    /**
     * 用户注册
     */
    User register(UserRegisterRequest request);

    /**
     * 用户登录
     */
    String login(UserLoginRequest request);

    /**
     * 根据用户名获取用户
     */
    User getUserByUsername(String username);

    /**
     * 根据ID获取用户
     */
    User getUserById(Long id);

    /**
     * 根据邮箱获取用户
     */
    User getUserByEmail(String email);

    /**
     * 更新用户信息
     */
    User updateUser(Long userId, UserUpdateRequest request);

    /**
     * 更新用户信息（管理员用）
     */
    User updateUser(User user);

    /**
     * 更新用户头像
     */
    User updateUserAvatar(Long userId, String avatarUrl);

    /**
     * 修改密码
     */
    boolean changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 重置密码
     */
    boolean resetPassword(String email);

    /**
     * 验证邮箱
     */
    boolean verifyEmail(Long userId, String code);

    /**
     * 验证手机号
     */
    boolean verifyPhone(Long userId, String code);

    /**
     * 更新登录信息
     */
    boolean updateLoginInfo(Long userId, String loginIp);

    /**
     * 获取用户列表（分页）
     */
    List<User> getUserList(int page, int size, String keyword, String industry, String location);

    /**
     * 获取用户总数
     */
    long getUserCount();

    /**
     * 禁用/启用用户
     */
    boolean updateUserStatus(Long userId, Integer status);

    /**
     * 用户认证
     */
    boolean verifyUser(Long userId);

    /**
     * 检查用户名是否存在
     */
    boolean existsByUsername(String username);

    /**
     * 检查邮箱是否存在
     */
    boolean existsByEmail(String email);

    /**
     * 检查手机号是否存在
     */
    boolean existsByPhone(String phone);

    /**
     * 关注用户
     */
    boolean followUser(Long followerId, Long followedId);

    /**
     * 取消关注
     */
    boolean unfollowUser(Long followerId, Long followedId);

    /**
     * 获取关注列表
     */
    List<User> getFollowingList(Long userId, int page, int size);

    /**
     * 获取粉丝列表
     */
    List<User> getFollowersList(Long userId, int page, int size);

    /**
     * 检查是否已关注
     */
    boolean isFollowing(Long followerId, Long followedId);

    /**
     * 创建用户（管理员用）
     */
    User createUser(User user);

    /**
     * 获取所有用户（管理员用）
     */
    List<User> getAllUsers();

    /**
     * 删除用户（管理员用）
     */
    boolean deleteUser(Long id);

    /**
     * 批量更新用户状态（管理员用）
     */
    boolean batchUpdateStatus(List<Long> ids, Integer status);

    /**
     * 重置用户密码（管理员用）
     */
    boolean resetPassword(Long id, String newPassword);

    /**
     * 获取最近注册用户（管理员用）
     */
    List<User> getRecentUsers(Integer limit);

    /**
     * 搜索用户（管理员用）
     */
    List<User> searchUsers(String keyword, Integer page, Integer size);

    /**
     * 获取用户统计数据（管理员用）
     */
    Object getUserStats();

    /**
     * 导出用户数据（管理员用）
     */
    String exportUsers(String format);

    /**
     * 获取活跃用户数
     */
    long getActiveUserCount();

    /**
     * 获取今日注册用户数
     */
    long getTodayRegistrationCount();

    /**
     * 获取今日登录用户数
     */
    long getTodayLoginCount();

}